/*
\ brief:  实现文件
\ author: 清晨与猫鱼
*/
#include <iostream>     // 引入标准输入输出库
#include <string>       // 引入字符串库
#include <memory>       // 引入内存管理库

using namespace std;    // 引用标准空间


/*
\ brief:  学生类：数据模型
\ author: 清晨与猫鱼
*/
class Student {
public:

/*
\ brief:   设置编号
\ author: 清晨与猫鱼
*/
    void setRollNo(string rollNo) {
        rollNo_ = move(rollNo);
    }

/*
\ brief:  获取名称
\ author: 清晨与猫鱼
*/
    string& getName() {
        return name_;
    }

/*
\ brief:    设置名称
\ author: 清晨与猫鱼
*/
    void setName(string name) {
        name_ = move(name);
    }

/*
\ brief:   设置编号
\ author: 清晨与猫鱼
*/
    string& getRollNo() {
        return rollNo_;
    }

private:
    string rollNo_;     // 编号
    string name_;       // 名称
};


/*
\ brief:   学生视图对象
\ author: 清晨与猫鱼
*/
class StudentView {
public:

/*
\ brief:  打印学生信息
\ author: 清晨与猫鱼
*/
    void printStudentDetails(const string& studentName,const string& studentRollNo) {
        cout << "Student: " << endl;
        cout << "Name: " << studentName << endl;
        cout << "Roll No: " << studentRollNo << endl;
    }
};


/*
\ brief:  学生控制器
\ author: 清晨与猫鱼
*/
class StudentController {
public:

/*
\ brief:    设置数据模型 与 视图
\ author: 清晨与猫鱼
*/
    explicit StudentController(Student* model, StudentView* view)
        : model_(model), view_(view) {        
    }

/*
\ brief:   设置学生的名称
\ author: 清晨与猫鱼
*/
    void setStudentName(string name) {
        model_->setName(move(name));
    }

/*
\ brief:   获取学生 的名称
\ author: 清晨与猫鱼
*/
    string& getStudentName() {
        return model_->getName();
    }

/*
\ brief:    设置学生编号
\ author: 清晨与猫鱼
*/
    void setStudentRollNo(string rollNo) {
        model_->setRollNo(move(rollNo));
    }

/* 
\ brief:    获取学生编号
\ author: 清晨与猫鱼
*/
    string& getStudentRollNo() {
        return model_->getRollNo();
    }

/*
\ brief:    更新视图
\ author: 清晨与猫鱼
*/
    void updateView() {
        view_->printStudentDetails(model_->getName(), model_->getRollNo());
    }

private:
    Student* model_;        // 学生的引用模型
    StudentView* view_;     // 学生视图引用
};